package com.yvon.service.demo.algorithm.offer;

/**
 * @author : Yvon
 * @since : 2022-07-26
 */
public class P16 {

    public static void main(String[] args) {
        Solution solution = new P16().new Solution();
        double v = solution.myPow(2, 3);
        System.out.println(v);
    }


    /**
     * 假如计算x的11次方
     * 已知11的二进制为1101
     * 可以拆分为：
     * x的1次方 * x的4次方 * x的8次方
     * 只用计算1
     *
     */
    class Solution {
        public double myPow(double x, int n) {
            double res = 1;
            long y = n;
            // 负数
            if (n < 0) {
                y = -y;
                x = 1/x;
            }
            while (y > 0) {
                if (y % 2 == 1) {
                    res = res * x;
                }
                x = x * x;
                y = y / 2;
            }
            return res;
        }

    }
}
